#pragma once

#include "head.h"
#include "parser.h"
#include "thread_poll.h"

class TcpConnect
    : public NoCopyable
{
private:
    int clifd_;
    bool verified_; // 身份是否已验证
    int uid_;       // 用户id
    string path_;   // 用户的实际目录
    int code_;      // 用户当前所在目录级数
    string peerIp_;
    int peerPort_;
    ThreadPoll *poll_; // 线程池

private:
    // 向客户端发送token
    IsClose sendToken();
    IsClose sendOK();
    IsClose sendERR(string msg);
    IsClose doLS(stringVecPtr param);
    IsClose doPWD(stringVecPtr param);
    IsClose doMKDIR(stringVecPtr param);
    IsClose doCD(stringVecPtr param);
    IsClose doREMOVE(stringVecPtr param);
    IsClose doPUTS(stringVecPtr param);
    IsClose doGETS(stringVecPtr param);

    void recv(struct Protocol &);
    void recvNBytes(char *buf, size_t size);
    bool has(string param, int dtType);

public:
    TcpConnect(int fd, ThreadPoll *poll);
    ~TcpConnect();

    string getPeer();
    bool isClose();
    IsClose handleRequest();
};